<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />

    <title>Telepresence community</title>
    <meta
      name="description"
      content="Get involved and collaborate with our outstanding community of adopters and contributors on the Telepresence project"
    />
    <meta name="keywords" content="Telepresence, Kubernetes, microservices" />
    <meta name="author" content="getambassador.io" />

    <link rel="shortcut icon" href="/favicon.ico" />

    <link
      rel="stylesheet"
      href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700&display=swap"
      type="text/css"
      media="all"
    />
    <link rel="stylesheet" href="/styles/home.css" />
    <link
      rel="stylesheet"
      href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.css"
    />

    <!--[if lte IE 8]>
      <script
        charset="utf-8"
        type="text/javascript"
        src="https://js.hsforms.net/forms/v2-legacy.js"
      ></script>
    <![endif]-->
    <script
      charset="utf-8"
      type="text/javascript"
      src="https://js.hsforms.net/forms/v2.js"
    ></script>

    <!-- Google Tag Manager -->
    <script>
      (function (w, d, s, l, i) {
        w[l] = w[l] || [];
        w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js" });
        var f = d.getElementsByTagName(s)[0],
          j = d.createElement(s),
          dl = l != "dataLayer" ? "&l=" + l : "";
        j.async = true;
        j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
        f.parentNode.insertBefore(j, f);
      })(window, document, "script", "dataLayer", "GTM-KMVFH7G");
    </script>
    <!-- End Google Tag Manager -->
  </head>
  <body>
    <!-- Google Tag Manager (noscript) -->
    <noscript
      ><iframe
        src="https://www.googletagmanager.com/ns.html?id=GTM-KMVFH7G"
        height="0"
        width="0"
        style="display: none; visibility: hidden;"
      ></iframe
    ></noscript>
    <!-- End Google Tag Manager (noscript) -->
    <header class="white-bg">
      <div class="navigation-left">
        <a class="datawire-link" href="/">
          <img alt="Telepresence" src="/images/telepresence-logo.png" />
        </a>
        <ul class="main-navigation">
          <li>
            <a href="/tutorials/docker">Get Started</a>
          </li>
          <li>
            <a href="/discussion/overview">Docs</a>
          </li>
          <li>
            <a href="/case-studies">Case Studies</a>
          </li>
          <li>
            <a href="/community">Community</a>
          </li>
          <li>
            <a href="/about">About</a>
          </li>
          <li>
            <a
              target="_blank"
              href="https://github.com/telepresenceio/telepresence"
              >GitHub</a
            >
          </li>
        </ul>
      </div>
      <div class="navigation-right">
        <ul class="main-navigation right">
          <li>
            <div class="dropdown">
              <button class="dropbtn">▾ Need Help?</button>
              <div class="dropdown-content">
                <a target="_blank" href="https://d6e.co/slack"
                  >Community Slack</a
                >
              </div>
            </div>
          </li>
        </ul>
      </div>
    </header>
    <section class="bg-white text-center padding-bottom-75 padding-top-60">
      <h1 class="text-uppercase text-xl">Join The Telepresence Community</h1>
      <p class="font-light text-md">
        Get involved and collaborate with our outstanding open source community
      </p>
    </section>
    <style>
      .blurb__section {
        display: grid;
        justify-content: center;
        grid-template-columns: repeat(auto-fit, minmax(250px, 325px));
        grid-gap: 30px;
        margin-top: 2rem;
      }
      .blurb__section svg {
        display: block;
        margin: 0 auto 1em;
      }
      .blurb__section h3 {
        font-size: 1.15em;
      }
      .blurb__section .btn {
        margin: 1em 0 0;
        font-size: 0.85em;
        letter-spacing: 0.025em;
      }
      .side-img {
        margin-top: 3rem;
        display: flex;
        flex-wrap: wrap;
        align-items: center;
      }
      .side-img h3 {
        font-size: 1.25rem;
        margin: 0 0 0.5em;
      }
      .side-img img {
        max-height: 60vh;
        display: block;
        margin: 0 auto;
      }
      .side-img .btn {
        margin-top: 1em;
      }
      .side-img > div {
        flex: 1;
        text-align: left;
      }
      .community-posts {
          display: grid;
          grid-template-columns: repeat(auto-fit, minmax(250px, 290px));
          grid-gap: 40px;
          font-size: .9rem;
      }
      .community-posts article {
          text-align: left;
      }
      .community-posts h3 {
          color: #222222;
          font-size: 1.1em;
          line-height: 1.2;
      }
      .community-posts__author {
          margin: 0 0 .75em;
          opacity: .8;
          font-size: .9em;
      }
    </style>
    <section class="bg-gray padding-top-75 padding-bottom-75">
      <div class="container text-center">
        <h2 class="text-lg text-center text-black">
          Ecosystem Projects Related to Telepresence
        </h2>
        <p class="text-md font-light">
          Developers worldwide are contributing to Telepresence. We’re building
          a vibrant community of contributors and related projects. We welcome
          any and all suggestions, new features, integrations, and
          documentation!
        </p>
        <div class="side-img">
          <div>
            <img src="/images/ambassador-bird.svg" alt="Ambassador's bird" />
          </div>
          <div>
            <h3>Service Preview and the Ambassador Edge Stack</h3>
            <p>
              The
              <a
                href="https://www.getambassador.io/products/edge-stack#delivery-acceleration"
                target="_blank"
                rel="noopener"
                >Delivery Acceleration</a
              >
              product within the
              <a
                href="https://www.getambassador.io/products/edge-stack/"
                target="_blank"
                rel="noopener"
                >Ambassador Edge Stack</a
              >
              supports local development of Kubernetes services through advanced
              traffic routing and innovative CI/CD technology. The
              <a
                href="https://www.getambassador.io/features/#local-development"
                target="_blank"
                rel="noopener"
                >Service Preview</a
              >
              feature leverages Telepresence to allow teams of developers to
              test and develop individual microservices locally while
              maintaining the rest of the microservices in the cloud.
            </p>
            <a
              class="btn btn-red"
              href="https://www.getambassador.io/products/edge-stack#service-preview"
              >Learn More</a
            >
          </div>
        </div>
      </div>
    </section>
    <section class="bg-white padding-top-75 padding-bottom-60">
      <div class="container text-center">
        <h2 class="text-lg text-black text-center padding-bottom-20">
          Explore and Contribute to Our Networks
        </h2>
        <div class="blurb__section">
          <div>
            <svg
              width="100"
              height="100"
              viewBox="0 0 127 127"
              fill="none"
              xmlns="http://www.w3.org/2000/svg"
            >
              <path
                d="M27.2 80C27.2 87.3 21.3 93.2 14 93.2C6.70002 93.2 0.800018 87.3 0.800018 80C0.800018 72.7 6.70002 66.8 14 66.8H27.2V80Z"
                fill="#E01E5A"
              />
              <path
                d="M33.8 80C33.8 72.7 39.7 66.8 47 66.8C54.3 66.8 60.2 72.7 60.2 80V113C60.2 120.3 54.3 126.2 47 126.2C39.7 126.2 33.8 120.3 33.8 113V80Z"
                fill="#E01E5A"
              />
              <path
                d="M47 27C39.7 27 33.8 21.1 33.8 13.8C33.8 6.49998 39.7 0.599976 47 0.599976C54.3 0.599976 60.2 6.49998 60.2 13.8V27H47Z"
                fill="#36C5F0"
              />
              <path
                d="M47 33.7C54.3 33.7 60.2 39.6 60.2 46.9C60.2 54.2 54.3 60.1 47 60.1H13.9C6.60001 60.1 0.700012 54.2 0.700012 46.9C0.700012 39.6 6.60001 33.7 13.9 33.7H47Z"
                fill="#36C5F0"
              />
              <path
                d="M99.9 46.9C99.9 39.6 105.8 33.7 113.1 33.7C120.4 33.7 126.3 39.6 126.3 46.9C126.3 54.2 120.4 60.1 113.1 60.1H99.9V46.9Z"
                fill="#2EB67D"
              />
              <path
                d="M93.3 46.9C93.3 54.2 87.4 60.1 80.1 60.1C72.8 60.1 66.9 54.2 66.9 46.9V13.8C66.9 6.49998 72.8 0.599976 80.1 0.599976C87.4 0.599976 93.3 6.49998 93.3 13.8V46.9Z"
                fill="#2EB67D"
              />
              <path
                d="M80.1 99.8C87.4 99.8 93.3 105.7 93.3 113C93.3 120.3 87.4 126.2 80.1 126.2C72.8 126.2 66.9 120.3 66.9 113V99.8H80.1Z"
                fill="#ECB22E"
              />
              <path
                d="M80.1 93.2C72.8 93.2 66.9 87.3 66.9 80C66.9 72.7 72.8 66.8 80.1 66.8H113.2C120.5 66.8 126.4 72.7 126.4 80C126.4 87.3 120.5 93.2 113.2 93.2H80.1Z"
                fill="#ECB22E"
              />
            </svg>

            <h3>Slack</h3>
            <p>
              Join our Slack to get answers to your questions and learn how
              others are using Telepresence at their organizations.
            </p>
            <a class="btn btn-black" href="/tutorials/docker"
              >Join the conversation</a
            >
          </div>
          <div>
            <svg
              xmlns="http://www.w3.org/2000/svg"
              width="100"
              height="100"
              fill="#24292e"
              viewBox="0 0 24 24"
            >
              <path
                d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"
              />
            </svg>
            <h3>Github</h3>
            <p>
              Help with documentation, request a new feature, or submit a bug
              fix. No contribution is too small!
            </p>
            <a class="btn btn-black" href="/tutorials/docker">Contribute</a>
          </div>
        </div>
      </div>
    </section>
    <section class="bg-gray padding-top-75 padding-bottom-75">
      <div class="container text-center">
        <h2 class="text-lg text-black text-center padding-bottom-60">
          What the Community Is Saying About Telepresence
        </h2>
        <div class="community-posts">
          <article>
            <h3>
              <a
                href="https://www.openshift.com/blog/telepresence-local-development"
                target="_blank"
                rel="noopener noreferrer"
                >Telepresence for Local Development - Michael Hausenblas</a
              >
            </h3>
            <p class="community-posts__author">By Michael Hausenblas</p>
            <p>
              OpenShift makes it easy to deploy your containers, but it can also
              impact your development cycle. This post covers how you can use
              Telepresence with OpenShift for faster local development.
            </p>
          </article>

          <article>
            <h3>
              <a href="https://codersociety.com/blog/articles/run-a-local-process-in-kubernetes-with-telepresence" target="_blank" rel="noopener noreferrer"
                >Run a local process in Kubernetes with Telepresence</a
              >
            </h3>
            <p class="community-posts__author">By Kentaro
                Wakayama</p>
            <p>
              This post walks through how the engineers at Coder Society use
              Telepresence in their Kubernetes development stack to gain access
              to running Kubernetes services without having to expose them
              publicly.
            </p>
          </article>

          <article>
            <h3>
              <a href="https://medium.com/stacktical/smarter-local-development-of-kubernetes-microservices-with-telepresence-3e338e948887" target="_blank" rel="noopener noreferrer"
                >Smarter local development of Kubernetes microservices with
                Telepresence</a
              >
            </h3>
            <p class="community-posts__author">Featured on Stacktical</p>
            <p>
            <p>
              Installing projects locally as a developer has always been
              tedious, and microservices make that even more complicated. In
              this post, Stacktical talks about how Telepresence makes it super
              fast and easy for them to work amongst existing Kubernetes
              microservices.
            </p>
          </article>

          <article>
            <h3>
              <a href="https://hackernoon.com/5-open-source-tools-for-microservices-developers-on-kubernetes-4fac73c2c6ee" target="_blank" rel="noopener noreferrer"
                >5 open source tools for microservices developers on Kubernetes</a
              >
            </h3>
            <p class="community-posts__author">By Richard Li</p>
            <p>
            <p>
              Kubernetes has powerful features for container scheduling, service
              discovery, and load balancing, but what tools exist for developers
              who are developing software on Kubernetes? This post covers 5
              popular open source tools, including Telepresence!
            </p>
          </article>

          <article>
            <h3>
              <a href="https://youtu.be/G8fA_JssUG8" target="_blank" rel="noopener noreferrer"
                >Using Telepresence for Kubernetes Development</a
              >
            </h3>
            <p class="community-posts__author">By Michael
                Hausenblas & Abhay Saxena</p>
            <p>
              In this video interview, Michael Hausenblas of Red Hat interviews
              Abhay Saxena, the lead engineer on Telepresence.
            </p>
          </article>

          <article>
            <h3>
              <a href="https://abhishek-tiwari.com/10-open-source-tools-for-highly-effective-kubernetes-sre-and-ops-teams/" target="_blank" rel="noopener noreferrer"
                >10 open-source Kubernetes tools for highly effective SRE and
                Ops Teams</a
              >
            </h3>
            <p class="community-posts__author">By Abhishek Tiwari</p>
            <p>
              Abhishek Tiwari, head of engineering at Isentia, reviews 10 open
              source Kubernetes tools, including Telepresence.
            </p>
          </article>

          <article>
            <h3>
              <a href="https://youtu.be/4cct9JgItYQ" target="_blank" rel="noopener noreferrer"
                >Productive Dev Environments for Kubernetes</a
              >
            </h3>
            <p class="community-posts__author">By Philip Lombardi</p>
            <p>
              This talk from the NYC Kubernetes meetup covers strategies and
              trade-offs for setting up productive and realistic development
              environments for microservices and includes a demo of
              Telepresence.
            </p>
          </article>

          <article>
            <h3>
              <a href="https://www.datawire.io/running-spark-drivers-with-telepresence/" target="_blank" rel="noopener noreferrer"
                >Running Spark Drivers with Telepresence</a
              >
            </h3>
            <p class="community-posts__author">By Nate Buesgens</p>
            <p>
              The team at vizual.ai uses Spark for analyzing and modeling
              clickstream data, Kubernetes for orchestrating their Spark
              cluster, and Telepresence to make the Spark application
              development workflow more efficient.
            </p>
          </article>
        </div>
        <p class="text-center padding-top-60"><a href="/case-studies/" class="btn btn-red">Read case studies</a></p>
      </div>
    </section>
    <footer class="white-bg">
      <ul class="main-navigation flex-center">
        <li>
          <a href="/tutorials/kubernetes">Get Started</a>
        </li>
        <li>
          <a href="/discussion/overview">Docs</a>
        </li>
        <li>
          <a href="/case-studies">Case Studies</a>
        </li>
        <li>
          <a href="/about">About</a>
        </li>
        <li>
          <a
            target="_blank"
            href="https://github.com/telepresenceio/telepresence"
            >GitHub</a
          >
        </li>
        <li>
          <a target="_blank" href="https://d6e.co/slack">Slack</a>
        </li>
      </ul>
    </footer>
    <script async defer src="https://buttons.github.io/buttons.js"></script>
    <script src="/js/jquery-3.2.1.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js"></script>
    <script>
      $(document).ready(function () {
        changeTab($(".about-tabs li.tab:first-child").data("tabid"));

        $(".about-tabs li.tab").click(function () {
          changeTab($(this).data("tabid"));
        });

        function changeTab(tabId) {
          $(".about-tabs li.tab").removeClass("active");
          $('.about-tabs li.tab[data-tabId="' + tabId + '"]').addClass(
            "active"
          );
          $(".tab-content div").hide();
          $("#" + tabId).show();
        }

        $(".quotes").slick();

        $(".alert .close").click(function (e) {
          $(this).parent().hide();
        });

        /*
         Smooth scrolling. Ref: https://css-tricks.com/snippets/jquery/smooth-scrolling/
         */
        $('a[href*="#"]')
          .not('[href="#"]')
          .not('[href="#0"]')
          .click(function (event) {
            // On-page links
            if (
              location.pathname.replace(/^\//, "") ==
                this.pathname.replace(/^\//, "") &&
              location.hostname == this.hostname
            ) {
              // Figure out element to scroll to
              var target = $(this.hash);
              target = target.length
                ? target
                : $("[name=" + this.hash.slice(1) + "]");
              // Does a scroll target exist?
              if (target.length) {
                // Only prevent default if animation is actually gonna happen
                event.preventDefault();
                $("html, body").animate(
                  {
                    scrollTop: target.offset().top,
                  },
                  1000,
                  function () {
                    // Callback after animation
                    // Must change focus!
                    var $target = $(target);
                    $target.focus();
                    if ($target.is(":focus")) {
                      // Checking if the target was focused
                      return false;
                    } else {
                      $target.attr("tabindex", "-1"); // Adding tabindex for elements not focusable
                      $target.focus(); // Set focus again
                    }
                  }
                );
              }
            }
          });

        /*
         * Replace all SVG images with inline SVG so we can change it's color when active
         * Ref: https://stackoverflow.com/questions/24933430/img-src-svg-changing-the-fill-color
         */
        $("img.svg").each(function () {
          var $img = $(this);
          var imgID = $img.attr("id");
          var imgClass = $img.attr("class");
          var imgURL = $img.attr("src");

          jQuery.get(
            imgURL,
            function (data) {
              // Get the SVG tag, ignore the rest
              var $svg = $(data).find("svg");

              // Add replaced image's ID to the new SVG
              if (typeof imgID !== "undefined") {
                $svg = $svg.attr("id", imgID);
              }
              // Add replaced image's classes to the new SVG
              if (typeof imgClass !== "undefined") {
                $svg = $svg.attr("class", imgClass + " replaced-svg");
              }

              // Remove any invalid XML tags as per http://validator.w3.org
              $svg = $svg.removeAttr("xmlns:a");

              // Check if the viewport is set, if the viewport is not set the SVG wont't scale.
              if (
                !$svg.attr("viewBox") &&
                $svg.attr("height") &&
                $svg.attr("width")
              ) {
                $svg.attr(
                  "viewBox",
                  "0 0 " + $svg.attr("height") + " " + $svg.attr("width")
                );
              }

              // Replace image with new SVG
              $img.replaceWith($svg);
            },
            "xml"
          );
        });
      });
    </script>
  </body>
</html>
